{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 导入必要的工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np # linear algebra\n",
    "import pandas as pd # data processing, CSV file I/O\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "      <td>331</td>\n",
       "      <td>654</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2011-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "      <td>131</td>\n",
       "      <td>670</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2011-01-03</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "      <td>120</td>\n",
       "      <td>1229</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2011-01-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "      <td>108</td>\n",
       "      <td>1454</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2011-01-05</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>82</td>\n",
       "      <td>1518</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant      dteday  season  yr  mnth  holiday  weekday  workingday  \\\n",
       "0        1  2011-01-01       1   0     1        0        6           0   \n",
       "1        2  2011-01-02       1   0     1        0        0           0   \n",
       "2        3  2011-01-03       1   0     1        0        1           1   \n",
       "3        4  2011-01-04       1   0     1        0        2           1   \n",
       "4        5  2011-01-05       1   0     1        0        3           1   \n",
       "\n",
       "   weathersit      temp     atemp       hum  windspeed  casual  registered  \\\n",
       "0           2  0.344167  0.363625  0.805833   0.160446     331         654   \n",
       "1           2  0.363478  0.353739  0.696087   0.248539     131         670   \n",
       "2           1  0.196364  0.189405  0.437273   0.248309     120        1229   \n",
       "3           1  0.200000  0.212122  0.590435   0.160296     108        1454   \n",
       "4           1  0.226957  0.229270  0.436957   0.186900      82        1518   \n",
       "\n",
       "    cnt  \n",
       "0   985  \n",
       "1   801  \n",
       "2  1349  \n",
       "3  1562  \n",
       "4  1600  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv(\"day.csv\")\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 731 entries, 0 to 730\n",
      "Data columns (total 16 columns):\n",
      "instant       731 non-null int64\n",
      "dteday        731 non-null object\n",
      "season        731 non-null int64\n",
      "yr            731 non-null int64\n",
      "mnth          731 non-null int64\n",
      "holiday       731 non-null int64\n",
      "weekday       731 non-null int64\n",
      "workingday    731 non-null int64\n",
      "weathersit    731 non-null int64\n",
      "temp          731 non-null float64\n",
      "atemp         731 non-null float64\n",
      "hum           731 non-null float64\n",
      "windspeed     731 non-null float64\n",
      "casual        731 non-null int64\n",
      "registered    731 non-null int64\n",
      "cnt           731 non-null int64\n",
      "dtypes: float64(4), int64(11), object(1)\n",
      "memory usage: 91.5+ KB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(731, 16)\n"
     ]
    }
   ],
   "source": [
    "# 样本数目和特征维数\n",
    "print(df.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>366.000000</td>\n",
       "      <td>2.496580</td>\n",
       "      <td>0.500684</td>\n",
       "      <td>6.519836</td>\n",
       "      <td>0.028728</td>\n",
       "      <td>2.997264</td>\n",
       "      <td>0.683995</td>\n",
       "      <td>1.395349</td>\n",
       "      <td>0.495385</td>\n",
       "      <td>0.474354</td>\n",
       "      <td>0.627894</td>\n",
       "      <td>0.190486</td>\n",
       "      <td>848.176471</td>\n",
       "      <td>3656.172367</td>\n",
       "      <td>4504.348837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>211.165812</td>\n",
       "      <td>1.110807</td>\n",
       "      <td>0.500342</td>\n",
       "      <td>3.451913</td>\n",
       "      <td>0.167155</td>\n",
       "      <td>2.004787</td>\n",
       "      <td>0.465233</td>\n",
       "      <td>0.544894</td>\n",
       "      <td>0.183051</td>\n",
       "      <td>0.162961</td>\n",
       "      <td>0.142429</td>\n",
       "      <td>0.077498</td>\n",
       "      <td>686.622488</td>\n",
       "      <td>1560.256377</td>\n",
       "      <td>1937.211452</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.059130</td>\n",
       "      <td>0.079070</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.022392</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>22.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>183.500000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.337083</td>\n",
       "      <td>0.337842</td>\n",
       "      <td>0.520000</td>\n",
       "      <td>0.134950</td>\n",
       "      <td>315.500000</td>\n",
       "      <td>2497.000000</td>\n",
       "      <td>3152.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>366.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.498333</td>\n",
       "      <td>0.486733</td>\n",
       "      <td>0.626667</td>\n",
       "      <td>0.180975</td>\n",
       "      <td>713.000000</td>\n",
       "      <td>3662.000000</td>\n",
       "      <td>4548.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>548.500000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.655417</td>\n",
       "      <td>0.608602</td>\n",
       "      <td>0.730209</td>\n",
       "      <td>0.233214</td>\n",
       "      <td>1096.000000</td>\n",
       "      <td>4776.500000</td>\n",
       "      <td>5956.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>731.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>0.861667</td>\n",
       "      <td>0.840896</td>\n",
       "      <td>0.972500</td>\n",
       "      <td>0.507463</td>\n",
       "      <td>3410.000000</td>\n",
       "      <td>6946.000000</td>\n",
       "      <td>8714.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          instant      season          yr        mnth     holiday     weekday  \\\n",
       "count  731.000000  731.000000  731.000000  731.000000  731.000000  731.000000   \n",
       "mean   366.000000    2.496580    0.500684    6.519836    0.028728    2.997264   \n",
       "std    211.165812    1.110807    0.500342    3.451913    0.167155    2.004787   \n",
       "min      1.000000    1.000000    0.000000    1.000000    0.000000    0.000000   \n",
       "25%    183.500000    2.000000    0.000000    4.000000    0.000000    1.000000   \n",
       "50%    366.000000    3.000000    1.000000    7.000000    0.000000    3.000000   \n",
       "75%    548.500000    3.000000    1.000000   10.000000    0.000000    5.000000   \n",
       "max    731.000000    4.000000    1.000000   12.000000    1.000000    6.000000   \n",
       "\n",
       "       workingday  weathersit        temp       atemp         hum   windspeed  \\\n",
       "count  731.000000  731.000000  731.000000  731.000000  731.000000  731.000000   \n",
       "mean     0.683995    1.395349    0.495385    0.474354    0.627894    0.190486   \n",
       "std      0.465233    0.544894    0.183051    0.162961    0.142429    0.077498   \n",
       "min      0.000000    1.000000    0.059130    0.079070    0.000000    0.022392   \n",
       "25%      0.000000    1.000000    0.337083    0.337842    0.520000    0.134950   \n",
       "50%      1.000000    1.000000    0.498333    0.486733    0.626667    0.180975   \n",
       "75%      1.000000    2.000000    0.655417    0.608602    0.730209    0.233214   \n",
       "max      1.000000    3.000000    0.861667    0.840896    0.972500    0.507463   \n",
       "\n",
       "            casual   registered          cnt  \n",
       "count   731.000000   731.000000   731.000000  \n",
       "mean    848.176471  3656.172367  4504.348837  \n",
       "std     686.622488  1560.256377  1937.211452  \n",
       "min       2.000000    20.000000    22.000000  \n",
       "25%     315.500000  2497.000000  3152.000000  \n",
       "50%     713.000000  3662.000000  4548.000000  \n",
       "75%    1096.000000  4776.500000  5956.000000  \n",
       "max    3410.000000  6946.000000  8714.000000  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 对数值型特征，得到每个特征的描述统计量\n",
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 单变量分布分析\n",
    "对单个变量，可用直方图、箱体图等方式查看其大致分布、是否存在噪声数据点等"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Users\\Administrator\\Anaconda3-5.3.1\\lib\\site-packages\\scipy\\stats\\stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
      "  return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 目标y（房屋价格）的直方图／分布\n",
    "fig = plt.figure()\n",
    "sns.distplot(df[\"cnt\"], bins=30, kde=True)\n",
    "plt.xlabel(\"Median value of owner-occupied homes\", fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000001B8354FAFD0>]],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "features = [\"cnt\"]  #可以一次指定多个特征\n",
    "df[features].hist()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. 离散特征的分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "season属性的不同取值和出现的次数\n",
      "3    188\n",
      "2    184\n",
      "1    181\n",
      "4    178\n",
      "Name: season, dtype: int64\n",
      "\n",
      "mnth属性的不同取值和出现的次数\n",
      "12    62\n",
      "10    62\n",
      "8     62\n",
      "7     62\n",
      "5     62\n",
      "3     62\n",
      "1     62\n",
      "11    60\n",
      "9     60\n",
      "6     60\n",
      "4     60\n",
      "2     57\n",
      "Name: mnth, dtype: int64\n",
      "\n",
      "weathersit属性的不同取值和出现的次数\n",
      "1    463\n",
      "2    247\n",
      "3     21\n",
      "Name: weathersit, dtype: int64\n",
      "\n",
      "weekday属性的不同取值和出现的次数\n",
      "6    105\n",
      "1    105\n",
      "0    105\n",
      "5    104\n",
      "4    104\n",
      "3    104\n",
      "2    104\n",
      "Name: weekday, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "#对类别型特征，观察其取值范围及直方图\n",
    "categorical_features = ['season','mnth','weathersit','weekday']\n",
    "for col in categorical_features:\n",
    "    print('\\n%s属性的不同取值和出现的次数'%col)\n",
    "    print(df[col].value_counts())\n",
    "    df[col] = df[col].astype('object')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. 数值特征的分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000001B835C97240>,\n",
       "        <matplotlib.axes._subplots.AxesSubplot object at 0x000001B835CBD550>],\n",
       "       [<matplotlib.axes._subplots.AxesSubplot object at 0x000001B835CDCBE0>,\n",
       "        <matplotlib.axes._subplots.AxesSubplot object at 0x000001B835D0A2B0>]],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#对数值型特征，直方图\n",
    "numerical_features = ['temp','atemp','hum','windspeed']\n",
    "df[numerical_features].hist()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3.7 数值型特征和y之间的相关性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1b835ec75c0>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cols = df.columns \n",
    "\n",
    "corrMatt = df[[\"temp\",\"atemp\",\n",
    "                  \"hum\",\"windspeed\",\n",
    "                  \"casual\",\"registered\",\n",
    "                  \"cnt\"]].corr()\n",
    "mask = np.array(corrMatt)\n",
    "mask[np.tril_indices_from(mask)] = False\n",
    "sns.heatmap(corrMatt, mask=mask,\n",
    "           vmax=.8, square=True,annot=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(7, 7)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "corrMatt.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "instant and dteday = 0.99\n",
      "holiday and weekday = 0.95\n",
      "mnth and weekday = 0.67\n",
      "dteday and weekday = 0.63\n",
      "instant and weekday = 0.63\n",
      "dteday and holiday = 0.54\n",
      "dteday and mnth = 0.54\n",
      "instant and mnth = 0.54\n",
      "instant and holiday = 0.54\n"
     ]
    }
   ],
   "source": [
    "#Set the threshold to select only highly correlated attributes\n",
    "threshold = 0.5\n",
    "# List of pairs along with correlation above threshold\n",
    "corr_list = []\n",
    "#size = data.shape[1]\n",
    "size = corrMatt.shape[0]\n",
    "\n",
    "#Search for the highly correlated pairs\n",
    "for i in range(0, size): #for 'size' features\n",
    "    for j in range(i+1,size): #avoid repetition\n",
    "        if (corrMatt.iloc[i,j] >= threshold and corrMatt.iloc[i,j] < 1) or (corrMatt.iloc[i,j] < 0 and corrMatt.iloc[i,j] <= -threshold):\n",
    "            corr_list.append([corrMatt.iloc[i,j],i,j]) #store correlation and columns index\n",
    "\n",
    "#Sort to show higher ones first            \n",
    "s_corr_list = sorted(corr_list,key=lambda x: -abs(x[0]))\n",
    "\n",
    "#Print correlations and column names\n",
    "for v,i,j in s_corr_list:\n",
    "    print (\"%s and %s = %.2f\" % (cols[i],cols[j],v))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
